O ggplot2 é um pacote estruturado de forma que seja
possível criar gráficos elaborados a partir de múltiplas camadas. Os
componentes básicos são os mesmos para todos os gráficos: um conjunto de
dados, sistema de coordenadas e os objetos geométricos denominados
geoms.
Para construir os gráficos, é utilizada a função
ggplot( ). Após definir seus argumentos principais, outras
funções são usadas em cadeia (formando camadas) , com o sinal
+, para customizar o painel da maneira que o usuário
preferir.
A base utilizada para exemplificar as funções será a do arquivo
student_habits_performance.csv.
# Instalando e carregando o pacote
if(!require("ggplot2")) install.packages("ggplot2")
library(ggplot2)
#Leitura da base de dados
performance = read_csv('bases/student_habits_performance.csv')
#Retirando o gênero "Other"
performance = performance %>% filter(gender!='Other')
performance
O primeiro argumento da função ggplot( ) é o
data, o data.frame com os dados. Em seguida, precisamos mapear
as propriedades visuais do gráfico com o mapping, utilizando o
aes. No argumento aes, devem ser especificadas as
variáveis dos eixos x e y, cores e
símbolos para plotar os dados.
performance %>% ggplot(mapping = aes(x = study_hours_per_day, y = exam_score))
Percebam que o gráfico está vazio. Precisamos adicionar a camada com
o elemento geom_. Neste caso, como queremos um gráfico de
dispersão, vamos utilizar o geom_point( )
performance %>%
ggplot(aes(x = study_hours_per_day, y = exam_score)) +
geom_point()
Pode-se definir outras especificações em uma função
geom_. No gráfico abaixo, foram modificados o tamanho, o
formato, a cor e a transparência (que varia de 0 a 1) dos pontos.
performance %>%
ggplot(aes(x = study_hours_per_day, y = exam_score)) +
geom_point(size = 1,color = 'blue', shape = 24, alpha = 0.8)
É possível também, adicionar outros elementos geométricos no mesmo
gráfico. Neste exemplo, foi adicionada uma reta de regressão linear pela
função geom_smooth
performance %>%
ggplot(aes(x = study_hours_per_day, y = exam_score)) +
geom_point() +
geom_smooth(method='lm', # o método utilizado é o linear model
se = F, # retirando o se (erro padrão)
linewidth=2, # alterando a grossura da linha
color='red')
Além de mapear as variáveis que devem aparecer nos eixos, também se pode usar variáveis para mapear cores, forma, tamanho, transparência e outras características visuais dos objetos geométricos no gráfico. Isso permite sobrepor grupos de observações em um mesmo gráfico.
# Mapando as cores dos pontos de acordo com o gênero
performance %>%
ggplot(aes(x = study_hours_per_day, y = exam_score, color = gender)) +
geom_point()+
geom_smooth(method='lm',se = F)
o ggplot2 fornece escalas automáticas aos gráficos. No
entanto, o controle sobre essas escalas é necessário para uma melhor
visualização.
As funções utilizadas para controlar as escalas dos elementos de um
gráfico do ggplot2 seguem um padrão. Todas possuem nomes iniciados com
scale_, depois o nome do elemento estético (color, fill, x
etc.) e, por fim, o tipo/nome da escala que será aplicada.
As especificações do scale_x_continuous e do
scale_y_continuous incluem o breaks e label.
performance %>%
ggplot(aes(x = study_hours_per_day, y = exam_score, color = gender)) +
geom_point()+
geom_smooth(method='lm',se = F)+
scale_y_continuous(breaks = seq(0, 100, 20))+ # sequência de 0 a 100 a cada 20 unidades
scale_x_continuous(breaks = seq(0,max(performance$study_hours_per_day,1)))+ #sequência de 0 ao máximo de horas de estudo a cada 1 unidade
scale_color_manual(values = c("Red","Blue"), #atribuindo cores vermelho e azul
labels = c("Mulher","Homem")) #mudando o texto das categorias
A função labs fornece rótulos personalizados para os
eixos e legendas. Além disso, podem ser adicionados um título, subtítulo
e legenda.
performance %>%
ggplot(aes(x = study_hours_per_day, y = exam_score, color = gender)) +
geom_point()+
geom_smooth(method='lm',se = F)+
scale_y_continuous(breaks = seq(0, 100, 20))+
scale_x_continuous(breaks = seq(0,max(performance$study_hours_per_day,1)))+
scale_color_manual(values = c("Red","Blue"),
labels = c("Mulher","Homem")) +
labs(x = "Horas de Estudo Diário",
y = "Nota" ,
color = "" , # foi deixado vazio dentro das aspas para tirar o o título da legenda
title = "Relação entre Horas de Estudo e Nota",
subtitle = "Student Habits vs Academic Performance: A Simulated Study",
caption = "Fonte: https://www.kaggle.com/datasets")
É possível alterar a aparência do gráfico manualmente usando o
theme( ) ou utilizando temas prontos com funções
theme_.
No link
https://ggplot2.tidyverse.org/reference/ggtheme.html são
apresentados os tipos de temas prontos do pacote.
# Usando o theme_classic( )
performance %>%
ggplot(aes(x = study_hours_per_day, y = exam_score, color = gender)) +
geom_point()+
geom_smooth(method='lm',se = F)+
scale_y_continuous(breaks = seq(0, 100, 20))+
scale_x_continuous(breaks = seq(0,max(performance$study_hours_per_day,1)))+
scale_color_manual(values = c("Red","Blue"),
labels = c("Mulher","Homem"))+ # mudando o nome das categorias
labs(x = "Horas de Estudo Diário", y = "Nota" ,color = "" ,
title = "Relação entre Horas de Estudo e Nota",
subtitle = "Student Habits vs Academic Performance: A Simulated Study",
caption = "Fonte: https://www.kaggle.com/datasets") +
theme_classic()
#Modificando o tema manualmente
performance %>%
ggplot(aes(x = study_hours_per_day, y = exam_score, color = gender)) +
geom_point()+
geom_smooth(method='lm',se = F)+
scale_y_continuous(breaks = seq(0, 100, 20))+
scale_x_continuous(breaks = seq(0,max(performance$study_hours_per_day,1)))+
scale_color_manual(values = c("Red","Blue"),
labels = c("Mulher","Homem"))+ # mudando o nome das categorias
labs(x = "Horas de Estudo Diário",
y = "Nota" ,
color = "" , # tirando o rótulo
title = "Relação entre Horas de Estudo e Nota",
subtitle = "Student Habits vs Academic Performance: A Simulated Study",
caption = "Fonte: https://www.kaggle.com/datasets") +
theme(axis.title = element_text(size = 13, face = 'bold',color = "gray19"), # colocando o título dos eixos em negrito e mudando a cor
axis.title.x = element_text(margin = margin(t = 13)), # aumentando a margem entre o rótulo do eixo x e o gráfico
axis.title.y = element_text(margin = margin(r = 13)), # aumentando a margem entre o rótulo do eixo y e o gráfico
plot.title = element_text(face = 'bold'), # deixando o título do gráfico em negrito
panel.grid = element_blank(), # retirando a borda do gráfico
panel.background = element_rect(fill = 'lightpink')) # mudando a cor do fundo
As cores podem ser definidas pelo nome padrão do R ou em código hexadecimal.
Cores padrão do R ->
http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf
Cores em código hexadecimal -> Gerador de cores aleatórias
https://coolors.co/
Os facets reproduzem um gráfico para cada nível de uma
determinada variável (ou combinação de variáveis). Os
facets são criados usando funções que começam com
facet_. Quando deseja-se criar gráficos para todas as
categorias de uma variável categórica, pode-se usar o
facet_wrap.
performance %>%
ggplot(aes(x = study_hours_per_day, y = exam_score, color = gender)) +
geom_point()+
geom_smooth(method='lm',se = F)+
scale_y_continuous(breaks = seq(0, 100, 20))+
scale_x_continuous(breaks = seq(0,max(performance$study_hours_per_day,1)))+
scale_color_manual(values = c("Red","Blue"),
labels = c("Mulher","Homem"))+
facet_wrap(~internet_quality)+ # reprodução do gráfico para categorias da variável qualidade de internet
labs(x = "Horas de Estudo Diário", y = "Nota" ,color = "" ,
title = "Relação entre Horas de Estudo e Nota",
subtitle = "Student Habits vs Academic Performance: A Simulated Study",
caption = "Fonte: https://www.kaggle.com/datasets") +
theme(axis.title = element_text(size = 13, face = 'bold',color = "gray19"),
axis.title.x = element_text(margin = margin(t = 13)),
axis.title.y = element_text(margin = margin(r = 13)),
plot.title = element_text(face = 'bold'),
panel.grid = element_blank(),
panel.background = element_rect(fill = 'gray90'))
Quando o interesse for em reproduzir os gráficos para os níveis de
duas variáveis categóricas, a função facet_grid( ) é
utilizada.
performance %>%
ggplot(aes(x = study_hours_per_day, y = exam_score, color = gender)) +
geom_point()+
geom_smooth(method='lm',se = F)+
scale_y_continuous(breaks = seq(0, 100, 20))+
scale_x_continuous(breaks = seq(0,max(performance$study_hours_per_day,1)))+
scale_color_manual(values = c("Red","Blue"),
labels = c("Mulher","Homem"))+
facet_grid(part_time_job~internet_quality)+ # reprodução do gráfico para qualidade da internet e trabalho
labs(x = "Horas de Estudo Diário", y = "Nota" ,color = "" ,
title = "Relação entre Horas de Estudo e Nota",
subtitle = "Student Habits vs Academic Performance: A Simulated Study",
caption = "Fonte: https://www.kaggle.com/datasets") +
theme(axis.title = element_text(size = 13, face = 'bold',color = "gray19"),
axis.title.x = element_text(margin = margin(t = 13)),
axis.title.y = element_text(margin = margin(r = 13)),
plot.title = element_text(face = 'bold'),
panel.grid = element_blank(),
panel.background = element_rect(fill = 'gray90'))
É possível alterar o texto das categorias dos facets com
o argumento labeller ou modificando direto na base.
# base modificada
perf_final = performance%>% mutate(internet_quality = factor(internet_quality,
levels = c('Poor','Average','Good'),
labels = c('Baixa','Média','Alta')))
# vetor com novos rótulos
job = c('Yes'='Sim','No'='Não')
perf_final %>%
ggplot(aes(x = study_hours_per_day, y = exam_score, color = gender)) +
geom_point()+
geom_smooth(method='lm',se = F)+
scale_y_continuous(breaks = seq(0, 100, 20))+
scale_x_continuous(breaks = seq(0,max(performance$study_hours_per_day,1)))+
scale_color_manual(values = c("Red","Blue"),
labels = c("Mulher","Homem"))+ # mudando o nome das categorias
facet_grid(part_time_job~internet_quality,
labeller = labeller(part_time_job = job))+ # reprodução do gráfico para qualidade da internet e trabalho e mudanças nos textos das categorias
labs(x = "Horas de Estudo Diário", y = "Nota" ,color = "" ,
title = "Relação entre Horas de Estudo e Nota",
subtitle = "Student Habits vs Academic Performance: A Simulated Study",
caption = "Fonte: https://www.kaggle.com/datasets\n\nNota: As facetas representam:\n- Linhas: Trabalho de meio período (Sim/Não)\n- Colunas: Qualidade da Internet (Baixa/Média/Alta)") +
theme(axis.title = element_text(size = 13, face = 'bold',color = "gray19"),
axis.title.x = element_text(margin = margin(t = 13)),
axis.title.y = element_text(margin = margin(r = 13)),
plot.title = element_text(face = 'bold'),
panel.grid = element_blank(),
panel.background = element_rect(fill = 'gray90'),
strip.background = element_rect(fill='white',color='gray19'),
strip.text = element_text(face='bold'), # deixando o texto das categorias em negrito
legend.position = 'bottom') # alterando a posição da legenda
O gráfico de médias com intervalos de erro é um método popular para comparar grupos com relação a uma variável numérica . A barra de erro pode representar um desvio padrão, um erro padrão da média ou um intervalo de confiança.
media_perf = performance %>%
group_by(gender) %>%
summarise(n = n(),
media = mean(exam_score, na.rm=TRUE),
dp = sd(exam_score, na.rm = TRUE),
errop = dp/sqrt(n))
media_perf %>%
ggplot(aes(x = gender,y = media))+
geom_point(size =3)+
geom_errorbar(aes(ymin = media - 2*errop, # definindo o limite mínimo do eixo y
ymax = media + 2*errop),# definindo o limite máximo do eixo y
width=0.2) # definindo o tamanho do traço
Podemos comparar a média entre mais grupos.
media_perf = performance %>%
group_by(gender,diet_quality) %>%
summarise(n = n(),
media = mean(exam_score, na.rm=TRUE),
dp = sd(exam_score, na.rm = TRUE),
errop = dp/sqrt(n))
media_perf %>%
ggplot(aes(x = gender, y = media, color=diet_quality))+
geom_point(size =3,
position = position_dodge(width = 0.5))+ # argumento para evitar sobreposição dos pontos
geom_errorbar(aes(ymin = media - 2*errop,
ymax = media + 2*errop),
width=0.2,
position = position_dodge(width = 0.5)) + # argumento para evitar sobreposição das barras
scale_color_discrete(labels = c('Média','Boa','Ruim'))+ # mmudando o texto das categorias
labs(x = 'Gênero', y = 'Nota', color = 'Qualidade da dieta')
Outra base utilizada será a do arquivo DENGBR23.csv
# Lendo os dados
dengue2023 = read_csv('bases/DENGBR23.csv')
# Selecionando as colunas de interesse e modificando as categorias
dados = dengue2023 %>% select(3:ID_OCUPA_N) %>%
mutate(DT_NOTIFIC = as.Date(DT_NOTIFIC),
REGIAO = case_when(
SG_UF %in% c(11, 12, 13, 14, 15, 16, 17) ~ "Norte",
SG_UF %in% c(21, 22, 23, 24, 25, 26, 27, 28, 29) ~ "Nordeste",
SG_UF %in% c(50, 51, 52, 53) ~ "Centro-Oeste",
SG_UF %in% c(31, 32, 33, 35) ~ "Sudeste",
SG_UF %in% c(41, 42, 43) ~ "Sul"),
CS_RACA = factor(CS_RACA,
levels =c(1,2,3,4,5,9),
labels = c('Branca','Preta','Amarela','Parda',
'Indígena','Ignorado')))
dados
O gráfico de barras ou colunas é utilizado para fazer comparações entre as categorias de uma variável qualitativa.
No gráfico abaixo, é apresentando um gráfico de barras de frequência de casos de dengue por raça.
dados %>%
filter(!CS_RACA == 'Ignorado',
!is.na(CS_RACA)) %>%
ggplot(aes(x = CS_RACA))+
geom_bar() # por default, o geom_bar() adota o stat = 'count'
Outra forma de fazer o mesmo gráfico, é criando um
tibble com uma coluna adicional com as frequências e
utilizando-a para a construção do gráfico.
# criando a tabela
casos_raca = dados %>%
group_by(CS_RACA) %>%
summarize(n = n())
casos_raca
# plotando
casos_raca %>%
filter(!CS_RACA == 'Ignorado',
!is.na(CS_RACA)) %>%
ggplot(aes(x = CS_RACA,y = n))+
geom_bar(stat='identity') # o 'identity' serve para indicar à função que as barras deverão ser plotadas de acordo com os valores do y
As barras podem ser customizadas dentro da função
geom_bar com o fill e color.
Esses argumentos controlam as cores do preenchimento e do contorno da
barra, respectivamente. Também usa-se o labs para tratar os rótulos do
gráfico.
casos_raca %>%
filter(!CS_RACA == 'Ignorado',
!is.na(CS_RACA)) %>%
ggplot(aes(x = CS_RACA,y = n))+
geom_bar(stat = 'identity',
fill = 'cornflowerblue', # mudando a cor de preenchimento
color='black')+ # mudando a cor do contorno
scale_y_continuous(labels = scales::number_format(big.mark = '.',decimal.mark = ','))+ # tirando a notação científica
labs(x = 'Raça', y = 'Frequência') # alterando os rótulos
As formas comuns de apresentar as barras, são em ordem crescente e decrescente.
# ordenando as barras
##crescente
casos_raca %>%
filter(!CS_RACA == 'Ignorado',
!is.na(CS_RACA))%>%
ggplot(aes(x = reorder(CS_RACA,n),y = n))+ # reordenando de acordo com o valor de n (frequência)
geom_bar(stat = 'identity',fill = 'cornflowerblue',color='black')+
scale_y_continuous(labels = scales::number_format(big.mark = '.',decimal.mark = ','))+
labs(x = 'Raça', y = 'Frequência')
##decrescente
casos_raca %>%
filter(!CS_RACA == 'Ignorado',
!is.na(CS_RACA)) %>%
ggplot(aes(x = reorder(CS_RACA,-n),y = n))+ # reordenando de acordo com o valor de -n
geom_bar(stat = 'identity',fill = 'cornflowerblue',color='black')+
scale_y_continuous(labels = scales::number_format(big.mark = '.',decimal.mark = ','))+
labs(x = 'Raça', y = 'Frequência')
Para incluir os valores observados nas barras, usa-se o
geom_text, que é utilizado para incluir uma camada de
texto. No mapeamento do geom_text foram incluídos como
rótulos os valores n e o vjust para controlar
o alinhamento vertical (hjust controla o alinha horizontal).
casos_raca %>%
filter(!CS_RACA == 'Ignorado',
!is.na(CS_RACA))%>%
ggplot(aes(x = reorder(CS_RACA,n),y = n))+
geom_bar(stat = 'identity',fill = 'cornflowerblue',color='black')+
geom_text(aes(label=n),vjust = -0.5)+
scale_y_continuous(labels = scales::number_format(big.mark = '.',decimal.mark = ','))+
labs(x = 'Raça', y = 'Frequência')
Dependendo do tamanho dos rótulos dos eixos, é necessário fazer modificações nos textos para facilitar a visualização dos gráficos. Existem algumas formas para evitar a sobreposição dos rótulos:
axis.text.x
dentro da função theme( )casos_raca %>%
filter(!CS_RACA == 'Ignorado',
!is.na(CS_RACA))%>%
ggplot(aes(x = reorder(CS_RACA,n),y = n))+
geom_bar(stat = 'identity',fill = 'cornflowerblue',color='black')+
geom_text(aes(label=n),vjust = -0.5)+
scale_y_continuous(labels = scales::number_format(big.mark = '.',decimal.mark = ','))+
labs(x = 'Raça', y = 'Frequência')+
theme(axis.text.x = element_text(angle=45,hjust = 1))
scale_x_discrete por meio
do guidecasos_raca %>%
filter(!CS_RACA == 'Ignorado',
!is.na(CS_RACA))%>%
ggplot(aes(x = reorder(CS_RACA,n),y = n))+
geom_bar(stat = 'identity',fill = 'cornflowerblue',color='black')+
geom_text(aes(label=n),vjust = -0.5)+
scale_y_continuous(labels = scales::number_format(big.mark = '.',decimal.mark = ','))+
labs(x = 'Raça', y = 'Frequência')+
scale_x_discrete(guide=guide_axis(n.dodge=2))
coord_flip()casos_raca %>%
filter(!CS_RACA == 'Ignorado',
!is.na(CS_RACA))%>%
ggplot(aes(x = reorder(CS_RACA,n),y = n))+
geom_bar(stat = 'identity',fill = 'cornflowerblue',color='black')+
geom_text(aes(label=n),
hjust=-0.5, # como as coordenadas foram invertidas, o hjust é modificado
size=3)+
scale_y_continuous(labels = scales::number_format(big.mark = '.',decimal.mark = ','))+
labs(x = 'Raça', y = 'Frequência')+
coord_flip()
O gráfico de barras agrupadas ajuda a avaliar a relação entre duas variáveis qualitativas.
O mapeamento do gráfico abaixo é definida pela raça (eixo x) e pelo sexo do indivíduo (fill). Desta forma, são construídas barras para cada raça com cores separadas de acordo com o sexo.
dados %>%
filter(!CS_RACA == 'Ignorado',
!is.na(CS_RACA),
!CS_SEXO == 'I')%>%
ggplot(aes(x = CS_RACA, fill= CS_SEXO ))+
geom_bar() # por default, o geom_bar agrupado deixam as barras empilhadas (position ='stack')
Outra forma de apresentar essas informações é dispondo as barras lado
a lado utilizando o argumento position ='dodge' dentro do
geom_bar( ).
dados %>%
filter(!is.na(CS_RACA),
!CS_SEXO == 'I')%>%
ggplot(aes(x = CS_RACA, fill= CS_SEXO ))+
geom_bar(position='dodge')
Para trabalhar com as barras empilhadas na escala de proporção é
preciso inserir o argumento position = 'fill' dentro do
geom_bar().
dados %>%
filter(
!is.na(CS_RACA),
!CS_SEXO == 'I')%>%
ggplot(aes(x = CS_RACA, fill= CS_SEXO ))+
geom_bar(position='fill')
É possível incluir os percentuais no gráfico, utilizando o
geom_text()
#criando tabela com as contagens e proporções
casos_raca_genero = dados %>%
filter(CS_SEXO %in% c('F','M'),
!is.na(CS_RACA)) %>%
group_by(CS_RACA,CS_SEXO) %>%
summarise(n = n()) %>%
mutate(prop = n/sum(n))
casos_raca_genero %>% # Calcula posição central da barra
ggplot(aes(x = CS_RACA, y = prop, fill = CS_SEXO)) + # mudando a ordem
geom_bar(stat='identity',position = 'fill') +
geom_text(aes(label = scales::percent(prop,accuracy = 1)), # colocando a proporção decimal como porcentagem sem casa decimal
position = position_stack(vjust = 0.5), # definindo a posição do texto
size=3)+
scale_y_continuous(breaks = seq(0, 1, 0.2), # definindo as quebras do eixo
label = scales::percent, # definindo a escala em porcentagem
expand = expansion(add = c(0, 0.05))) + # grudando as barras no eixo
labs(x = 'Raça', y = 'Frequência', fill = 'Sexo') +
theme_minimal()
Para alterar as cores das barras de acordo com as categorias do
fill, utilizamos a função scale_fill_manual()
com os argumentos:
breaks para definir a ordem as categorias na
legenda
labels para definir o nome das categorias na
legenda
values para definir a cor para cada
categoria
casos_raca_genero %>%
ggplot(aes(x = CS_RACA, y = prop, fill = CS_SEXO)) +
geom_bar(stat='identity',position = 'fill') +
geom_text(aes(label = scales::percent(prop,accuracy = 1)),
position = position_stack(vjust = 0.5),
size=3)+
scale_y_continuous(breaks = seq(0, 1, 0.2),
label = scales::percent,
expand = expansion(add = c(0, 0.05))) +
scale_fill_manual(breaks = c('F','M'),
labels = c('Feminino','Masculino'),
values = c('pink','cornflowerblue'))+
labs(x = 'Raça', y = 'Frequência', fill = 'Sexo') +
theme_minimal()
O histograma é uma representação gráfica da distribuição de um conjunto de dados numéricos. Ele é usado para visualizar a frequência com que diferentes intervalos de valores ocorrem em um conjunto de dados.
performance %>%
ggplot(aes(x = exam_score))+
geom_histogram() # por default, o geom_histogram() apresenta 30 classes(bins)
As modificações de cores são feitas da mesma forma que no gráfico de
barras. Para modificar as classes, podemos utilizar os seguintes
argumentos dentro do geom_histogram
bins para alterar quantidade de classes
binwidth para alterar a amplitude de todas as
classes
breaks para definir intervalos com amplitudes
diferentes
#bins
performance %>%
ggplot(aes(x = exam_score))+
geom_histogram(fill = "blue",
color = "white",
bins = 20)+
labs(x = "Nota",
y = "Frequência")
#binwidth
performance %>%
ggplot(aes(x = exam_score))+
geom_histogram(fill = "blue",
color = "white",
binwidth = 10)+
labs(x = "Nota",
y = "Frequência")
#breaks
performance %>%
ggplot(aes(x = exam_score))+
geom_histogram(fill = "blue",
color = "white",
breaks = c(0,20,50,75,90,100))+
labs(x = "Nota",
y = "Frequência")
O boxplot é uma representação usada para verificar a distribuição de uma variável por meio de seus quantis. Esse gráfico permite verificar os valores de mínimo, máximo e os quartis. Além disso, indica a existência de valores discrepantes (outliers).
performance %>%
ggplot(aes(y = exam_score))+
geom_boxplot()
Para adicionar os limites (representados pelos bigodes) no gráfico de
boxplot, utilizamos a função geom_errorbar.
performance %>%
ggplot(aes(y = exam_score))+
geom_boxplot()+
geom_errorbar(stat='boxplot', # definição necessária para a função entender quais são os limites
width = 0.1) # alterando o tamanho dos bigodes
É possível modificar a cor do boxplot usando fill e
color , modificar outliersm(inclusive removê-los do
gráfico) utilizando o argumento outlier.shape.
#modificando a forma dos outliers
performance %>%
ggplot(aes(y = exam_score))+
geom_boxplot(fill ='cornflowerblue',
color='darkblue',
outlier.shape = 2)+
geom_errorbar(stat='boxplot',width = 0.2,color='darkblue')+
labs(y = 'Nota')
#removendo os outliers
performance %>%
ggplot(aes(y = exam_score))+
geom_boxplot(fill ='cornflowerblue',
color='darkblue',
outlier.shape = NA)+
geom_errorbar(stat='boxplot',width = 0.2,color='darkblue')+
labs(y = 'Nota')
Assim como nos gráficos anteriores, é possível criar boxplots para cada categoria de uma variável categórica, especificando-a no mapping
# distribuição da nota de acordo com a variável part_time_job
performance %>%
ggplot(aes(x = part_time_job,y = exam_score))+
geom_boxplot()+
geom_errorbar(stat='boxplot',
width=0.1)+
labs(x = "Trabalho",
y = "Nota",
fill='Sexo')
# distribuição da nota de acordo com a variável part_time_job e gender
performance %>%
ggplot(aes(x = part_time_job,y = exam_score,fill=gender))+
geom_boxplot(position = position_dodge(width=0.8), # alterando a proximdade entre as caixas
width = 0.5)+ #alterando o tamanho da caixa
geom_errorbar(stat='boxplot',
width=0.1,
position = position_dodge(width=0.8))+ # alterando a posição das barras de erro (utilizar o mesmo argumento position do geom_boxplot para o alinhamento)
labs(x = "Trabalho",
y = "Nota",
fill='Sexo')
performance %>%
ggplot(aes(x = part_time_job,y = exam_score,fill=gender))+
geom_boxplot(position = position_dodge(width=0.8),
width = 0.5)+
geom_errorbar(stat='boxplot',
width=0.1,
position = position_dodge(width=0.8))+
scale_fill_manual(breaks = c('Female','Male'),
labels = c('Mulher','Homem'),
values = c('lightyellow','lightgreen'))+
scale_x_discrete(labels = c('Não','Sim'))+
labs(title= 'Distribuição da nota por gênero e trabalho',
x = "Trabalho",
y = "Nota",
fill='Sexo')+
theme_classic()
Outra forma de representar a ditribuição de uma variável
quantitativa, é utilizando gráfico de densidade usando o
geom_density
performance %>%
ggplot(aes(x = exam_score))+
geom_density()
Para comparar distribuições entre as categorias de uma variável
qualitativa, precisamos mapear dentro do
mapping = aes().
performance %>%
ggplot(aes(x = exam_score,fill = gender))+
geom_density(alpha = 0.4)+ # alterando a opacidade
scale_fill_discrete(labels = c("Mulher","Homem"))+
labs(x = 'Nota',
y = 'Densidade',
fill = 'Sexo')
Os gráficos de violinos também mostram a distribuição de uma variável
quantitativa e é semelhante ao gráfico de densidade, porém ambos
argumentos x e y são obrigatórios. Sua
plotagem é espelhada e rotacionada em 90 graus.
#violino
performance %>%
ggplot(aes(x = gender,y = exam_score))+
geom_violin()
Podemos combinar boxplots e os violinos.
performance %>%
ggplot(aes(x = gender,y = exam_score))+
geom_violin(fill='cornflowerblue')+
geom_boxplot(fill='darkorange',
width = 0.5, # alterando o tamanho da caixa para o boxplot ficar dentro do violino
outlier.shape = NA)+
scale_x_discrete()
labs(x = 'Sexo',
y = 'Nota')+
theme_classic()
NULL
casos_data = dados %>% group_by(DT_NOTIFIC) %>%
summarize(n_casos = n())
casos_data %>% ggplot(aes(x = DT_NOTIFIC,y = n_casos))+
geom_line()
Os eixos com as datas são formatadas pelas funções
scale_x_date e scale_y_date. Os principais
argumentos dessas funções são:
date_breaks para indicar as quebras no eixo
date_labels para indicar a formatação dos
rótulos
tabela <- data.frame(
Código = c("%a", "%A", "%e", "%d", "%m", "%b", "%B", "%y", "%Y"),
Significado = c("Dia da semana (abreviado)", "Dia da semana (completo)",
"Dia do mês (sem zero)", "Dia do mês (com zero)",
"Mês (numérico, com zero)", "Mês (abreviado)",
"Mês (completo)", "Ano (sem século)", "Ano (com século)"),
Exemplo = c('"Dom"', '"Domingo"', '"2"', '"02"', '"12"',
'"Dez"', '"Dezembro"', '"23"', '"2023"')
)
knitr::kable(tabela, align = "c", format = "pipe",
caption = "Códigos de formatação de datas em R")
| Código | Significado | Exemplo |
|---|---|---|
| %a | Dia da semana (abreviado) | “Dom” |
| %A | Dia da semana (completo) | “Domingo” |
| %e | Dia do mês (sem zero) | “2” |
| %d | Dia do mês (com zero) | “02” |
| %m | Mês (numérico, com zero) | “12” |
| %b | Mês (abreviado) | “Dez” |
| %B | Mês (completo) | “Dezembro” |
| %y | Ano (sem século) | “23” |
| %Y | Ano (com século) | “2023” |
casos_data %>% ggplot(aes(x = DT_NOTIFIC,y = n_casos))+
geom_line(col='red',
linewidth=1, # alterando a grossura da linha
linetype = 'dashed')+ # alterando o tipo da linha
scale_x_date(date_breaks = '3 month',
date_labels = '%b/%Y')+
labs(x = 'Data',
y = 'Casos')+
theme_classic()
Para fazer gráfico de linha por categorias de uma variável qualitativa, especificamos a informação no mapping
casos_data_sexo = dados %>%
filter(CS_SEXO %in% c('F','M')) %>%
group_by(DT_NOTIFIC, CS_SEXO) %>%
summarize(n_casos = n())
casos_data_sexo %>% ggplot(aes(x = DT_NOTIFIC,y = n_casos, color = CS_SEXO))+
geom_line(linewidth=1)+
scale_x_date(date_breaks = '3 month',
date_labels = '%B')+
labs(x = 'Data',
y = 'Casos')+
theme_classic()
Supondo que estamos interessados em observar a evolução no número de
casos por sexo e região. Podemos reproduzir o gráfico acima para todas
as regiões do Brasil usando o facet_wrap.
# Agrupando os dados pela data, sexo e região
casos_regiao = dados %>%
filter(CS_SEXO %in% c('F','M')) %>%
group_by(DT_NOTIFIC, CS_SEXO, REGIAO) %>%
summarize(n_casos = n())
# plotando
casos_regiao %>%
ggplot(aes(x = DT_NOTIFIC, y = n_casos, color = CS_SEXO)) +
geom_line(linewidth = 1) +
facet_wrap(~REGIAO) +
scale_x_date(
date_breaks = "3 months",
date_labels = "%b\n%Y" ) + # o \n é utilizado para quebra de linha
labs(x = "Data",
y = "Número de Casos",
color = "Sexo") +
theme_classic() +
theme(axis.text.x = element_text(angle = 45, hjust = 1),
legend.position = "bottom")